# -!- coding: utf-8 -!-
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者：cacho_37967865
#博客：https://blog.csdn.net/sinat_37967865
#文件：baidu_nlp.py
#日期：2019-09-17
#备注：Python利用百度AI进行自然语言处理, 需要先安装python SDK   pip install baidu-aip
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

from aip import AipNlp
from file_deal import save_file,get_file
from deal_json import dict_to_json


# 定义常量
APP_ID = '17266883'
API_KEY = 't9wUe9yxWbO5wBFtPOGtBGTG'
SECRET_KEY = 'A4cwyrjiaq9LS4WFlGMmn7zL7ugV10OZ'

client = AipNlp(APP_ID, API_KEY, SECRET_KEY)


# 词法分析接口向用户提供分词、词性标注、专名识别三大功能；能够识别出文本串中的基本词汇（分词），对这些词汇进行重组、标注组合后词汇的词性，并进一步识别出命名实体。
def lexer_text():
    text = "百度是一家高科技公司"
    temp = client.lexer(text)            # 调用词法分析 text:待分析文本（目前仅支持GBK编码），长度不超过65536字节
    dict_to_json(temp)


# 词法分析接口向用户提供分词、词性标注、专名识别三大功能；能够识别出文本串中的基本词汇（分词），对这些词汇进行重组、标注组合后词汇的词性，并进一步识别出命名实体。
def lexer_custom():
    text = "百度是一家高科技公司"          # text:待分析文本（目前仅支持GBK编码），长度不超过65536字节
    temp = client.lexerCustom(text)
    dict_to_json(temp)


# 依存句法分析接口可自动分析文本中的依存句法结构信息，利用句子中词与词之间的依存关系来表示词语的句法结构信息（如“主谓”、“动宾”、“定中”等结构关系），并用树状结构来表示整句的结构（如“主谓宾”、“定状补”等）
def dep_parser():
    text = "今天天气怎么样"                   # text:待分析文本（目前仅支持GBK编码），长度不超过256字节
    options = {}
    options["mode"] = 1                      # 如果有可选参数,默认值为0，可选值mode=0（对应web模型）；mode=1（对应query模型）
    temp = client.depParser(text)
    dict_to_json(temp)


# 词向量表示接口提供中文词向量的查询功能。
def word_embedding():
    word = "张飞"
    temp = client.wordEmbedding(word)        # 词向量表示 文本内容（GBK编码），最大64字节
    dict_to_json(temp)


# 中文DNN语言模型接口用于输出切词结果并给出每个词在句子中的概率值
def dnn_lm():
    text = "岑是你那个那个"                   # 文本内容（GBK编码），最大512字节，不需要切词
    temp = client.dnnlm(text)
    dict_to_json(temp)                      # 返回：ppl-float	描述句子通顺的值：数值越低，句子越通顺


# 词义相似度 输入两个词，得到两个词的相似度结果
def word_simEmbedding():
    word1 = "北京"
    word2 = "河北"                                # 文本内容（GBK编码），最大64字节
    temp = client.wordSimEmbedding(word1,word2)
    dict_to_json(temp)                            # 返回：score 相似度分数,1最大


# 短文本相似度 判断两个文本的相似度得分
def sim_net():
    text1 = "浙富股份"
    text2 = "万事通自考网"                         # 文本内容（GBK编码），最大512字节
    options = {}
    options["model"] = "CNN"                      # 默认为"BOW"，可选"BOW"、"CNN"与"GRNN"
    temp = client.simnet(text1,text2)
    dict_to_json(temp)                            # 返回：score 相似度分数,1最大


# 评论观点抽取 提取一条评论句子的关注点和评论观点，并输出评论观点标签及评论观点极性
def comment_tag():
    text = "三星电脑电池不给力"                    # 评论内容（GBK编码），最大10240字节
    options = {}
    options["type"] = 13                         # 评论行业类型，默认为4（餐饮美食） 1-酒店，2-KTV，3-丽人，4-美食餐饮，5-旅游，6-健康，7-教育，8-商业，9-房产，10-汽车，11-生活，12-购物，13-3C
    temp = client.commentTag(text,options)
    dict_to_json(temp)                            # 返回：sentiment 情感搭配的极性（0表示消极，1表示中性，2表示积极）


# 情感倾向分析 对包含主观观点信息的文本进行情感极性类别（积极、消极、中性）的判断，并给出相应的置信度。
def sentiment_classify():
    text = "三星电脑电池不给力"                    # 文本内容（GBK编码），最大102400字节
    temp = client.sentimentClassify(text)
    dict_to_json(temp)                            # 返回：sentiment 情感搭配的极性（0表示消极，1表示中性，2表示积极）


# 文章标签 针对网络各类媒体文章进行快速的内容理解
def keyword_tag():
    title = "iphone手机出现“白苹果”原因及解决办法，用苹果手机的可以看下"     # 篇章的标题，最大80字节
    content = "如果下面的方法还是没有解决你的问题建议来我们门店看下成都市锦江区红星路三段99号银石广场24层01室。"      # 篇章的正文，最大65535字节
    temp = client.keyword(title,content)
    dict_to_json(temp)                            # 返回：score 权重(取值范围0~1)


 # 文章分类 对文章按照内容类型进行自动分类，首批支持娱乐、体育、科技等26个主流内容类型
def topic_item():
    title = "iphone手机出现“白苹果”原因及解决办法，用苹果手机的可以看下"     # 篇章的标题，最大80字节
    content = "如果下面的方法还是没有解决你的问题建议来我们门店看下成都市锦江区红星路三段99号银石广场24层01室。"      # 篇章的正文，最大65535字节
    temp = client.topic(title,content)
    dict_to_json(temp)                            # 返回：lv1_tag_list 一级分类结果,lv2_tag_list 二级分类结果


# 文本纠错, 识别输入文本中有错误的片段，提示错误并给出正确的文本结果
def ecnet_text():
    text = "本来今天高高兴兴"                  # 文本内容（GBK编码），待纠错文本，输入限制511字节
    temp = client.ecnet(text)
    dict_to_json(temp)                      # 返回：correct_query	纠错后的文本


 # 对话情绪识别 针对用户日常沟通文本背后所蕴含情绪的一种直观检测，可自动识别出当前会话者所表现出的情绪类别及其置信度，可以帮助企业更全面地把握产品服务质量、监控客户服务质量
def emotion_text():
    text = "今天实在是郁闷呀"                      # 待识别情感文本，输入限制512字节
    options = {}
    options["scene"] = "talk"                     # default（默认项-不区分场景），talk（闲聊对话-如度秘聊天等），task（任务型对话-如导航对话等），customer_service（客服对话-如电信/银行客服等）
    temp = client.emotion(text,options)
    dict_to_json(temp)                            # 返回：label item的分类标签；optimistic(积极情绪) pessimistic（强烈负向情绪）、neutral（非强烈负向情绪）


# 新闻摘要 自动抽取新闻文本中的关键信息，进而生成指定长度的新闻摘要
def news_summary():
    content = "麻省理工学院的研究团队为无人机在仓库中使用RFID技术进行库存查找等工作，创造了一种..."       # 字符串（限200字符数）字符串仅支持GBK编码，长度需小于200字符数（即400字节）
    maxSummaryLen = 30
    options = {}
    options["title"] = "标题"                                     # 字符串（限200字符数）字符串仅支持GBK编码，长度需小于200字符数（即400字节）
    temp = client.newsSummary(content,maxSummaryLen,options)
    dict_to_json(temp)


if __name__ == '__main__':
    #lexer_text()
    #lexer_custom()
    #dep_parser()
    #word_embedding()
    #dnn_lm()
    #word_simEmbedding()
    #sim_net()
    #comment_tag()
    #sentiment_classify()
    #keyword_tag()
    #topic_item()
    #ecnet_text()
    #emotion_text()
    news_summary()

